# PERFORM文

説明書の該当箇所: 6.5.23 PERFORM文

5本あります。「内」は文をその場に囲む形(いわゆるインラインPERFORM)、
「外」は別の段落や節を呼ぶ形です。

  内PERFORM文.cob            繰り返しの回数と打ち切り。OK が並びます
  内PERFORM文-FOREVER.cob    PERFORM FOREVER
  PERFORM文-FOREVER.cob      同上
  外PERFORM文-段落.cob       段落を呼ぶ。THRU の範囲。OK が並びます
  外PERFORM文-節.cob         節を呼ぶ。THRU の範囲。OK が並びます

すべて Standard 版で動きます。

  ※ PERFORM文-FOREVER.cob と 内PERFORM文-FOREVER.cob は同じ内容です
    (行番号の欄だけが違います)。どちらを実行しても結果は同じです。

# 内PERFORM文.cob — 繰り返しと打ち切り

  PERFORM 10 times ... END-PERFORM      回数を指定して繰り返す
  EXIT PERFORM                          繰り返しそのものを抜ける
  EXIT PERFORM CYCLE                    今回の分だけ飛ばして次の回へ
  PERFORM xxx 3 times.                  段落を3回呼ぶ

EXIT PERFORM と EXIT PERFORM CYCLE の違いが分かるように、
同じ 10 times の繰り返しを2つ並べ、どちらも結果が 3 になる作りにして
あります。なぜ同じ 3 になるのかを追ってみてください。

# FOREVER の2つの書き方

  PERFORM FOREVER          ... END-PERFORM     囲んだ中を無限に繰り返す
  PERFORM 段落名 FOREVER                       段落を無限に呼ぶ

どちらも自分で止める必要があります。前者は EXIT PERFORM で抜け、
後者は段落の中で条件を見て STOP RUN しています。
止め方を書き忘れると終わらないので、そこが読みどころです。

  ii=1
  ii=2
  ii=3

が2回ぶん表示されて終わります。

# 外PERFORM文 — 段落と節

段落を呼ぶ形と、節(SECTION)を呼ぶ形を別のプログラムにしてあります。

  PERFORM xxx.              1つだけ実行して戻る
  PERFORM xxx THRU yyy.     xxx から yyy までを続けて実行して戻る

THRU の範囲がどこまでかを、加算の結果で確かめる作りです。
呼ばれる側は 1 / 10 / 100 のように桁の違う値を足すので、
表示された数字を見れば、どの段落を通ったかが分かります。

  例) i = 22 なら、1 を足す段落と 10 を足す段落を2回ずつ通った

節を呼ぶ場合は、節の中の段落すべてが対象になります。
段落版と節版を見比べると、その違いが分かります。
